[ART-2156] Migrate from poetry to uv#36
Merged
Merged
Conversation
Convert pyproject.toml to PEP 621 metadata with the hatchling backend, replace poetry.lock with uv.lock, and add taskipy tasks for test and benchmark. The main entry point stays a project script (uv run main). taskipy pins psutil<7, so an override-dependencies entry keeps psutil 7.x. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Each call leaked a connection whose fd was only reclaimed by cycle GC. Python 3.14's incremental GC collects these lazily enough that benchmark runs exceed a 1024 fd limit and crash with EMFILE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Falcon staging/prod keep issuing the old poetry commands until their releases ship, and poetry 2.x can install a PEP 621 project as long as resolution succeeds. Bound requires-python at <4.0 (taskipy caps python there) and relax psutil to >=5.9,<8 so taskipy's psutil<7 pin resolves without uv's override-dependencies, which poetry has no equivalent for. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Keeps poetry-based installs deterministic until falcon prod switches to the uv commands. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
m-truscott
approved these changes
Jul 23, 2026
m-truscott
left a comment
There was a problem hiding this comment.
I guess we can remove poetry.lock completely
Contributor
Author
@m-truscott we probably can. I opted to keep it for the transitionary period while falcon on prod still has the old commands. plan is to remove it once the falcon change reaches prod. But I think poetry would autogenerate a lockfile if there wasn't one anyway. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pyproject.tomlto PEP 621 metadata with the hatchling backend; replacepoetry.lockwithuv.lockmainas a project script (uv run main); add taskipy taskstestandbenchmark(uv run task <name>), matching the convention in agent-management-apibenchmarkrunsartemis_scripts/benchmark.py --runs 3 --output artemis_results.csvSqlQuery: connections were never closed and were only reclaimed by cycle GC. On Python 3.14 the new incremental GC reclaims them lazily enough that benchmark runs blow past a 1024 fd limit and crash with EMFILETransition compatibility (poetry still works)
Falcon rolls out its command change per environment (dev on merge, staging on component release, prod on platform release), while this repo's
mainis shared by all environments. To avoid breaking staging/prod — which keep runningpip3 install poetry && python -m poetry installetc. until their releases ship — the pyproject stays resolvable by poetry 2.x, andpoetry.lockis kept alongsideuv.lock:requires-python = ">=3.8,<4.0"(taskipy caps python at <4.0; poetry needs the bound to resolve)>=5.9,<8so taskipy'spsutil<7pin resolves without uv'soverride-dependencies, which poetry has no equivalent forVerified the full old command sequence (
poetry install,poetry run pytest --benchmark-skip tests/, the benchmark script) against this branch with a freshpip install poetry(2.4.1). Once the falcon change reaches prod, poetry support (its lock file and the constraints above) can be dropped.Test plan
uv run mainruns the demouv run task test— 79 passed, 18 skippeduv run task benchmarkcompletes 3 runs and writesartemis_results.csv, verified underulimit -n 1024on Python 3.14.2Related PRs
🤖 Generated with Claude Code